package com.swanclouds.redfish.updates.domin;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.swanclouds.model.updates.FirmwareInventory;
import com.swanclouds.redfish.common.redfish.Status;

import java.util.Map;

/**
 * Author:      HuangFuYuHui
 * Title:       FirmwareInventoryModel
 * Description: 可升级的固件资源
 * Date:        2022/7/27 17:56
 */
public class FirmwareInventoryModel implements FirmwareInventory {

    /**
     * 可升级固件资源的访问路径
     */
    @JsonProperty("@odata.id")
    private String dataId;

    /**
     * 可升级固件资源模型的OData描述信息
     */
    @JsonProperty("@odata.context")
    private String context;

    /**
     * 可升级固件资源的类型
     */
    @JsonProperty("@odata.type")
    private String type;

    /**
     * 可升级固件资源的ID
     */
    @JsonProperty("Id")
    private String id;

    /**
     * 可升级固件资源的名称
     */
    @JsonProperty("Name")
    private String name;

    /**
     * 可升级固件资源的状态
     */
    @JsonProperty("Status")
    private Status status;

    /**
     * 可升级固件资源的固件版本
     */
    @JsonProperty("Version")
    private String version;

    /**
     * 可升级固件资源是否可更新
     * ● true
     * ● false
     */
    @JsonProperty("Updateable")
    private String updateable;

    /**
     * 可升级固件资源的固件ID
     */
    @JsonProperty("SoftwareId")
    private String softwareId;

    /**
     * 可升级固件资源的基本信息
     */
    @JsonProperty("Oem")
    private Map<String, Object> oem;

    /**
     * 可升级固件资源访问路径
     *
     */
    @Override
    public String getDataId() {
        return this.dataId;
    }

    /**
     * 可升级固件资源的OData描述信息
     *
     */
    @Override
    public String getContext() {
        return this.context;
    }

    /**
     * 可升级固件资源的类型
     *
     */
    @Override
    public String getType() {
        return this.type;
    }

    /**
     * 可升级固件资源的ID
     * Id
     *
     */
    @Override
    public String getId() {
        return this.id;
    }

    /**
     * 可升级固件资源的名称
     * Name
     *
     */
    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public String toString() {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.writeValueAsString(this);
        } catch (JsonProcessingException e) {
        }
        return "FirmwareInventoryModel {" +
                "  @odata.id='" + dataId + '\'' +
                ", @odata.context='" + context + '\'' +
                ", @odata.type='" + type + '\'' +
                ", Id='" + id + '\'' +
                ", Name='" + name + '\'' +
                ", Status='" + status + '\'' +
                ", Version='" + version + '\'' +
                ", Updateable='" + updateable + '\'' +
                ", SoftwareId=" + softwareId +
                ", Oem=" + oem +
                '}';
    }
}
